查看原文
其他

玩转Android adb命令(adb降级)

云天实验室 哆啦安全 2022-05-24

1.adb简介

adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能。



在Android SDK安装目录的platform-tools目录下找到adb工具。


adb在某种程度上有很大权限的,因为adb的设计初衷是为了方便开发人员调试,因此必然需要暴露一些权限以外的接口,利用这个特性可以绕开权限机制在非Root非定制机上做一些操作。


2.adb架构

adb是一个C/S架构的应用程序,由三部分组成

(1).运行在pc端的adb client

命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的adb服务器,如果找不到adb服务器,“adb”程序自动启动一个adb服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向adb servcer发送服务请求;


(2).运行在pc端的adb server

adb Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,adb Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;


(3)运行在设备端的常驻进程adb demon(adbd)

程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接adb服务器,并且为运行在主机上的客户端提供一些服务;


3.adb端口被占用

5037为adb默认端口,若5037端口被占用的解决方法

(1).找到使用该端口的进程pid

netstat -aon|findstr 5037


(2).通过pid找到对应的进程名(便于定位,可以跳过)

tasklist /fi "pid eq 5162"


(3).使用命令终止该命令的运行

taskkill /pid 5162 /f


4.基本用法

为命令指定目标设备

如果有多个设备/模拟器连接,则需要为命令指定目标设备

adb devicesadb -s 10.92.164.26:5555 install test.apk


启动adb server命令

adb start-server


停止adb server命令

adb kill-server


查看adb版本

adb version


以root权限运行adbd

adb的运行原理是PC端的adb server与手机端的守护进程adbd建立连接,然后PC端的adb client通过adb server转发命令,adbd接收命令后解析运行。


如果adbd以普通权限执行,有些需要root权限才能执行的命令无法直接用adb xxx执行。这时可以adb shell然后su后执行命令,也可以让adbd以root权限执行,就能随意执行高权限命令。

adb root


有些手机root后也无法通过adb root命令让adbd以root权限执行

adbd cannot run as root in production builds


先安装

adbd Insecure

然后

adb root


指定adb server的网络端口

adb -P <port> start-server


让设备在5555端口监听TCP/IP连接

adb tcpip 5555


通过IP地址连接设备

adb connect <device-ip-address>


断开无线连接

adb disconnect <device-ip-address>


无线连接(无需借助USB线)

需要root权限

susetprop service.adb.tcp.port 5555

找到Android设备的IP地址


restart adbdstop adbdstart adbd


5.应用管理

查看应用列表

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]


adb shell pm list packages的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数,如下所示:


所有应用

adb shell pm list packages


系统应用

adb shell pm list packages -s


第三方应用

adb shell pm list packages -3


安装apk

adb install [-lrtsdg] <path_to_apk>


adb install后面可以跟一些可选参数来控制安装apk的行为,可用参数及含义,如下所示:






常见安装失败输出代码、含义及可能的解决办法,如下所示:


卸载应用

adb uninstall [-k] <packagename>


清除应用数据与缓存

adb shell pm clear <packagename>


查看前台Activity

adb shell dumpsys activity activities | grep mFocusedActivity


查看正在运行的Services

adb shell dumpsys activity services [<packagename>]


查看应用详细信息

adb shell dumpsys package <packagename>


6.与应用交互

主要是使用am <command>命令,常用的<command>


<INTENT>参数很灵活,和写Android程序时代码里的Intent相对应。

用于决定intent对象的选项如下:


<INTENT>里还能带数据,就像写代码时的Bundle一样


调起Activity

adb shell am start [options] <INTENT>adb shell am start -n com.tx.mm/.ui.LauncherUIadb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"


调起Service

adb shell am startservice [options] <INTENT>adb shell am startservice -n com.tx.mm/.plugin.accountsync.model.AccountAuthenticatorService


发送广播

adb shell am broadcast -a android.intent.action.BOOT_COMPLETEDadb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver


强制停止应用

adb shell am force-stop <packagename>adb shell am force-stop com.tx.mobilesafe


禁用应用和启动

adb shell pm disable-user <packagename>adb shell pm disable <packagename>adb shell pm enable <packagename>


撤消应用程序的权限

(1).向应用授予权限。只能授予应用程序声明的可选权限

adb shell pm grant <packagename> <PACKAGE_PERMISSION>adb -d shell pm grant packageName android.permission.BATTERY_STATS


(2).取消应用授权

adb shell pm revoke <packagename> <PACKAGE_PERMISSION>

选项--user user_id要禁用的用户


滑动解锁

adb shell input swipe 300 1000 300 500


7.查看日志

Android系统的日志分为两部分,底层的Linux内核日志输出到/proc/kmsg,Android的日志输出到/dev/log。


按tag和级别过滤日志

adb logcat ActivityManager:I MyApp:D *:Sadb logcat -v long ActivityManager:I *:S


清空日志

adb logcat -c


内核日志

adb shell dmesg


8.查看设备信息

型号

adb shell getprop ro.product.model


电池状况

adb shell dumpsys battery


屏幕分辨率

adb shell wm size


屏幕密度

adb shell wm density


显示屏参数

adb shell dumpsys window displays


android_id

adb shell settings get secure android_id


IMEI

adb shell dumpsys iphonesubinfo


Android系统版本

adb shell getprop ro.build.version.release


IP地址

adb shell ifconfig "| grep Mask"


Mac地址

adb shell cat /sys/class/net/wlan0/address


CPU信息

adb shell cat /proc/cpuinfo


内存信息

adb shell cat /proc/meminfo


更多硬件与系统属性

adb shell cat /system/build.prop


可通过adb shell getprop <属性名>命令单独查看

adb shell cat /system/build.prop | grep ro.product.cpu.abi


修改设置

修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行adb reboot重启设备,或手动重启。

修改设置的原理主要是通过settings命令修改如下路径里存放的设置值

/data/data/com.android.providers.settings/databases/settings.db


关闭USB调试模式

adb shell settings put global adb_enabled 0


状态栏和导航栏的显示隐藏

adb shell settings put global policy_control <key-values>


表示设置在所有界面下都同时隐藏状态栏和导航栏

adb shell settings put global policy_control immersive.full=*


表示设置在包名为com.package1和com.package2的应用里隐藏状态栏,在除了包名为com.package3的所有应用里隐藏导航栏

adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3


恢复正常模式

adb shell settings put global policy_control null


屏幕截图

adb shell screencap -p /sdcard/sc.png


Linux和Windows

adb shell screencap -p | sed "s/\r$//" > sc.png


Mac OS X

adb shell screencap -p | gsed "s/\r$//" > sc.png


录制屏幕

adb shell screenrecord /sdcard/filename.mp4


重新挂载system分区为可写

adb shellsumount


重新挂载

mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system


查看连接过的WiFi密码

adb shellsucat /data/misc/wifi/*.conf


重启手机

adb reboot


检测设备是否已root

adb shellsu


使用Monkey进行压力测试

adb shell monkey -p <packagename> -v 500


开启WiFi

adb rootadb shell svc wifi enable


关闭WiFi

adb rootadb shell svc wifi disable


设置wifi优先,有网络和wifi情况下优先使用wifi

adb shell svc wifi prefer


开启/关闭数据流量

svc data disableadb shell svc data enable adb shell svc data prefer


9.刷机相关命令

重启到Recovery模式

adb reboot recovery


从Recovery重启到Android

adb reboot


重启到Fastboot模式

adb reboot bootloader


查看进程

adb shell ps


查看实时资源占用情况

adb shell top


查看进程UID

adb shell dumpsys package <packagename> | grep userId=


10.安全相关

启用SELinux

adb rootadb shell setenforce 1


禁用SELinux

adb rootadb shell setenforce 0


启用dm_verity

adb rootadb enable-verity


禁用dm_verity

adb rootadb disable-verity


11.常见问题

启动adb server失败

adb server进程想使用的5037端口被占用

netstat -ano | findstr LISTENINGtaskkill /PID 12418

重启adb


推荐文章

Android系统run-as命令原理(权限访问)

Android系统中run-as和su命令的源码解析(升降权限)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存